﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DongFangGuoKai.WMSPlatform.Domain.AGVModels
{
    /// <summary>
    /// 生成任务单
    /// </summary>
    public class AddTaskModel: BaseTaskModel
    {  

        /// <summary>
        /// 任务类型，与在RCS-2000端配置的主任务类型编号一致   小料箱：A10  大料箱：A11   CTU输送线出库：A12  CTU输送线入库：A13  托盘：B1
        /// </summary>
        public string? TaskTyp { get; set; }

        /// <summary>
        /// 容器类型（叉车/CTU专用）  1小料箱  2大料箱  3托盘
        ///叉车项目必传
        ///Require:false    
        /// </summary>
        public string? CtnrTyp { get; set; }

        /// <summary>
        /// 容器编号（叉车/CTU专用）  
        /// Require：false
        /// </summary>
        public string? CtnrCode { get; set; }

        /// <summary>
        /// 容器数量（叉车堆叠专用），默认值1，仅记录堆叠的数量不记录堆叠的每个容器号
        /// Require:false 
        /// </summary>
        public string? CtnrNum { get; set; }
        /// <summary>
        /// 任务模式 
        ///0-普通move 
        ///1-出库move 
        ///2-入库move 
        ///3-移库move
        ///Require:false 
        /// </summary>
        public string? TaskMode { get; set; }

        /// <summary>
        /// 工作位，一般为机台或工作台位置，与RCS-2000端配置的位置名称一致, 工作位名称为字母\数字\或组合, 不超过32位。
        /// Require:false 
        /// </summary>
        public string? WbCode { get; set; }

        /// <summary>
        /// 位置路径：AGV关键路径位置集合，与任务类型中模板配置的位置路径一一对应
        /// </summary>
        public PositionCodePathDto?[] PositionCodePath { get; set; }

        /// <summary>
        /// 货架编号，不指定货架可以为空   
        /// </summary>
        public string? PodCode { get; set; }

        /// <summary>
        /// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ，不指定方向可以为空；
        /// 如果终点不是工作台或工作台未配置操作方向则货架拣货方向podDir作为终点方向；如果工作台配有操作方向，
        /// 则系统会根据货架拣货方向podDir和工作台操作方向计算货架终点方向
        /// </summary>
        public string? PodDir { get; set; }

        /// <summary>
        /// 货架类型, 传空时表示随机找个货架
        /// 找空货架传参方式如下：
        ///-1: 代表不关心货架类型, 找到空货架即可.
        ///-2: 代表从工作位获取关联货架类型, 如果未配置, 只找空货架.
        ///货架类型编号: 只找该货架类型的空货架.
        /// </summary>
        public string? PodTyp { get; set; }

        /// <summary>
        /// 物料批次或货架上的物料唯一编码
        /// </summary>
        public string? MaterialLot { get; set; }

        /// <summary>
        /// 优先级，从（1~127）级，最大优先级最高。为空时，采用任务模板的优先级。
        /// </summary>
        public string? Priority { get; set; }

        /// <summary>
        /// AGV编号，填写表示指定某一编号的AGV执行该任务  
        /// </summary>
        public string? AgvCode { get; set; }

        /// <summary>
        /// 组编号
        ///CTU场景下用于按组出库，同组任务优先拼车。 如业务需要任务组间或组内按顺序出库，则需调用料箱顺序出库（CTU）接口。
        ///潜伏式场景下，通过组号来管理顺序出库的顺序，组号小的优先出库。
        /// </summary>
        public string? GroupId { get; set; }

        /// <summary>
        /// 设备类型
        /// </summary>
        public string? AgvTyp { get; set; }

        /// <summary>
        /// 区域/策略中挑选货架以及根据物料批次挑选货架时的先进先出规则
        /// </summary>
        public string? PositionSelStrategy { get; set; }

        /// <summary>
        /// 自定义字段.JSON格式 
        /// </summary>
        public string? Data { get; set; }

    }

    /// <summary>
    ///  位置路径
    /// </summary>
    public class PositionCodePathDto
    {
        /// <summary>
        /// 位置编号, 单个编号不超过64位
        /// </summary>
        public string? PositionCode { get; set; }

        /// <summary>
        /// 位置类型说明
        /// </summary>
        public string? Type { get; set; }
    }
}
